/**
 * 通过模板forward<>模板实现完美转发
 * 保留参数的左右值属性
*/
#include <bits/stdc++.h>
using namespace std;
void fun_1(int&& T){
    cout<<"右值="<<T<<endl;
}
void fun_1(int& T){
    cout<<"左值="<<T<<endl;
}
//这个模板函数可以接受左值和右值
template<typename T>
void fun(T&& i){
    fun_1(forward<T>(i));
}
int main()
{
    int i=4;
    fun(i);
    fun(3);
    return 0;
}